Skip to content

[AgentX] DeepSeek-V4-Pro-0813 llm-d on GB200 - #3741

Open
cquil11 wants to merge 19 commits into
chore/remove-llmd-launcherfrom
test/dnm-llm-d
Open

cquil11 wants to merge 19 commits into
chore/remove-llmd-launcherfrom
test/dnm-llm-d

Conversation

@cquil11

@cquil11 cquil11 commented Oct 5, 2026 •

Copy link
Copy Markdown
Collaborator

Changes

  • Add DeepSeek-V4-Pro-0813 AgentX on GB200: aggregate TP8/DEP8 on 2 nodes, 1P-DEP8/1D-DEP8 on 4 nodes, and 2P-DEP8/1D-DEP16 on 8 nodes.
  • Build on srt-slurm's llm-d frontend (frontend.type: llm-d, feat(frontends): add the llm-d router NVIDIA/srt-slurm#588), which the submodule includes as of v2.49.0 (chore: bump srt-slurm to v2.49.0 #3882). The standalone llm-d launcher is removed in chore: remove the standalone llm-d launcher #3883, which this PR is stacked on. Each DEP worker is one vllm serve that balances its DP ranks itself, so the EPP routes to the worker.
  • Keep the pinned DSpark ARM64 image and its bundled llm-d router v0.10.0. All AgentX MTP throughput uses golden synthetic acceptance with adaptive verification disabled: K3 → AL 3.01 and K5 → AL 3.61, selected at runtime from the committed curve. Combined throughput/eval requests launch a fresh server with real block rejection for accuracy.
  • Declare Mooncake DRAM offloading for the corresponding variants: 45% of available node DRAM for aggregate and 66.6667% for disaggregated runs. Keep the existing topology, draft lengths, and memory tuning.

@github-actions

github-actions Bot commented Oct 5, 2026

Copy link
Copy Markdown
Contributor

Thanks for the contribution!

  • Review: If this PR changes files owned by someone other than a repository admin or @SemiAnalysisAI/core, ask one eligible CODEOWNER to complete the latest PR_REVIEW_CHECKLIST.md before contacting a core maintainer on Slack. Follow the template exactly, including As a PR reviewer and CODEOWNER, I have reviewed this and have, so sign-off verification triggers.
  • PR verification: Sweeps run only when the PR appends an inferencex-e2e/perf-changelog.yaml entry and carries exactly one primary label: full-sweep-fail-fast (strongly recommended; canary plus per-matrix fail-fast), full-sweep-enabled (canary; matrix jobs continue after a failure), or non-canary-full-sweep-enabled (no canary or fail-fast). The modifiers all-evals, evals-only, and agentx-fast require a primary label. On fork PRs, a maintainer applies the label. See sweep labels and reuse.
  • After merging: PR authors must ensure all GitHub Actions jobs pass. Transient failures often pass on rerun; see how to rerun failed jobs.
中文

感谢你的贡献!

  • **审阅:**如果 PR 修改的文件归属于仓库管理员及 @SemiAnalysisAI/core 之外的 CODEOWNER,请先联系一位有资格的 CODEOWNER 填写最新的 PR_REVIEW_CHECKLIST.md,再通过 Slack 联系核心维护者。必须严格遵循模板,并保留 As a PR reviewer and CODEOWNER, I have reviewed this and have,才能触发签核验证。
  • **PR 验证:**只有当 PR 在 inferencex-e2e/perf-changelog.yaml 末尾追加了条目,并且恰好带有一个主标签时,才会运行扫描:full-sweep-fail-fast(强烈推荐;canary 加逐矩阵 fail-fast)、full-sweep-enabled(有 canary;矩阵任务在失败后继续运行)或 non-canary-full-sweep-enabled(无 canary,也无 fail-fast)。修饰标签 all-evals、evals-only 和 agentx-fast 必须与主标签一起使用。fork PR 的标签由维护者添加。参见扫描标签与复用。
  • **合并后:**PR 作者必须确保所有 GitHub Actions 任务通过。临时性失败通常可以通过重新运行恢复;参见重新运行失败任务的说明。

@cquil11 cquil11 added the full-sweep-enabled Full sweep with canary gate; matrix jobs run to completion despite failures label Oct 9, 2026
@cquil11 cquil11 changed the title [DNM] Test the llm-d router through srt-slurm [AgentX] DeepSeek-V4-Pro-0813 llm-d on GB200 Oct 9, 2026
@cquil11
cquil11 marked this pull request as ready for review October 9, 2026 20:39
@cquil11
cquil11 requested a review from a team October 9, 2026 20:39
@cquil11
cquil11 changed the base branch from main to chore/remove-llmd-launcher October 9, 2026 20:39
@cquil11
cquil11 added this pull request to stack #3884 October 9, 2026 20:39
@github-actions

github-actions Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

inferencex-e2e/infx diff: +74 -7

Generally most InferenceX submissions don't need to add changes to the infx package. On the off chance they do, generally the diff is small. Please prompt your agent to clean your PR to keep your diff to only necessary & minimal changes too. We have an increased code quality bar for changes to the infx package.

中文

大多数 InferenceX 提交通常不需要修改 infx 包。即使确实需要,改动通常也很小。请让你的 agent 清理 PR,使改动只包含必要且最小的内容。infx 包的改动有更高的代码质量要求。

@claude

claude Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Claude finished @cquil11's task in 1m 2s —— View job


Review of PR #3741

  • Gather context (diff vs origin/chore/remove-llmd-launcher)
  • Review recipes, master config, lane change, changelog
  • Post findings

I found one blocking issue and posted it as an inline comment.

  • 🔴 2P1D decode GPU count (inferencex-e2e/configs/nvidia-master.yaml:6127): the DEP16 decode is declared as tp: 8, ep: 16, but the recipe runs it on 16 GPUs. Results count GPUs from tp, so this variant would record 24 GPUs instead of 32 and overstate throughput per GPU by about 33%. The node count is read from the recipe, so the job will still launch and the wrong numbers won't stand out. Fix: set tp: 16, ep: 16.

The other checks passed:

  • The perf-changelog.yaml entry is appended at the end of the file.
  • The image is on the public registry quay.io and pinned by digest.
  • The dsv4 prefix is valid.
  • Adding vllm to the gb200-nv frameworks in lanes.py only enables the new configs.
  • The Mooncake segment sizes match the declared DRAM shares: 4 × 150 GB is about 2/3 and 4 × 101 GB is about 45% of each ~900 GB tray.

Comment thread inferencex-e2e/configs/nvidia-master.yaml Outdated

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Additional findings (outside the current diff — GitHub can't attach inline comments there):

  • 🔴 inferencex-e2e/infx/launch/drivers/srt/lanes.py — New gb200-nv dsv4 'vllm' (llm-d) multi-node AgentX jobs never qualify for shared_run_root, so their srt-slurm checkout lands in the plain runner workspace instead of the Lustre shared-run-root. check_request (lanes.py:69) now lets FRAMEWORK=vllm dsv4 jobs onto this lane, but shared_run_root's Matches at lines 82-83 only list frameworks=any_of("dynamo-vllm") and dynamo-sglang+agentic, so shared stays False in run_multinode (srt/init.py:134) and compute_workspace (checkout.py:195) skips staging a node-visible copy. If GITHUB_WORKSPACE isn't visible to the extra GB200 compute nodes a job allocates, the worker nodes can't find the installed venv/checkout and the job fails at startup. Fix: add a dsv4+frameworks=any_of("vllm") (agentic) Match to gb200-nv's shared_run_root tuple alongside the existing dynamo-vllm/dynamo-sglang rows.

    Why this was flagged

    Trigger: a multinode AgentX launch with MODEL_PREFIX=dsv4, FRAMEWORK=vllm on cluster gb200-nv (the new agg-llm-d.yaml/disagg-llm-d.yaml recipes added in configs/nvidia-master.yaml, e.g. dsv4-fp4-gb200-vllm-llm-d-agentic-mtp-disagg using 2P-DEP8/1D-DEP16 over 8 nodes). lanes.py:69 now accepts framework 'vllm' for gb200-nv, but the shared_run_root Matches at lanes.py:82-83 require frameworks dynamo-vllm or dynamo-sglang exactly, so Match.call (policy.py:42) returns False for 'vllm'. run_multinode computes shared=False (srt/init.py:134), so checkout_dir (checkout.py:52) places the checkout under run.workspace rather than runners.yaml's gb200-nv shared-run-root (/mnt/lustre01/users-public/sa-shared/gha-runs, line 721). The existing dsv4+dynamo-vllm/dynamo-sglang rows were added specifically because this same cluster+model combo at multi-node scale needed the Lustre root; nothing in the new code gives 'vllm' that same treatment.

    Verification: The new dsv4-fp4-gb200-vllm-llm-d-agentic-mtp-disagg/agg jobs (nvidia-master.yaml, framework: vllm, runner: cluster:gb200-nv) are admitted to the gb200-nv SRT_MULTI lane because lanes.py:69 added "vllm" to frameworks. shared is computed at srt/init.py:134, and gb200-nv's shared_run_root matches (lanes.py:81-83) cover only dynamo-vllm and dynamo-sglang+agentic, not vllm, so shared=False.

@github-actions

github-actions Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

cquil11 and others added 4 commits October 9, 2026 15:56
Port #2719's llm-d submission to srt-slurm's llm-d frontend: disagg
1P1D DEP8/DEP8 and 2P1D DEP8/DEP16 with Mooncake on prefill, and agg
TP8, DEP8, and DEP8 with Mooncake. Drop the MiniMax-M3 smoke keys.

Co-authored-by: Ilya Markov <markovilya197@gmail.com>
Signed-off-by: Cam Quilici <cjquilici@gmail.com>
Signed-off-by: Cam Quilici <cjquilici@gmail.com>
Signed-off-by: Cam Quilici <cjquilici@gmail.com>
Signed-off-by: Cam Quilici <cjquilici@gmail.com>
@cquil11 cquil11 added non-canary-full-sweep-enabled Run the full sweep without the canary gate (full search space, no trim) and removed full-sweep-enabled Full sweep with canary gate; matrix jobs run to completion despite failures labels Oct 9, 2026
Signed-off-by: Cam Quilici <cjquilici@gmail.com>
Signed-off-by: Cam Quilici <cjquilici@gmail.com>
cquil11 and others added 11 commits October 9, 2026 16:34
… timeout

Signed-off-by: Cam Quilici <cjquilici@gmail.com>
… test/dnm-llm-d

# Conflicts:
#	inferencex-e2e/perf-changelog.yaml
Signed-off-by: Cam Quilici <cjquilici@gmail.com>
… 1007 nightly / DSv4-Pro ATOM AgentX 改用 MegaMoE DEP 并在 1007 nightly 启用 LMCache MP (#3819)

* perf(amd): DSv4-Pro ATOM AgentX on MegaMoE DEP with an LMCache MP tier on the 1007 nightly

Move dsv4-fp4-mi355x-atom-agentic-mtp to rocm/atom-dev:nightly_202610071700
(ATOM 0.1.7.dev65+ga526f0d55). C64 and C128 switch from RCCL expert
parallelism to MegaMoE with DP pad-row masking and a fixed-slot decode
instance; C128 adds prefill-only EPLB that stops after its warmup rebalances.
C256 and the new C384 add ATOM's lmcache_mp CPU KV tier, served by one LMCache
server per node that the new dsv4-atom-lmcache-mp-server.sh setup script
starts from the LMCache build in the image. C48 and C96 keep RCCL.

将 dsv4-fp4-mi355x-atom-agentic-mtp 更新到 rocm/atom-dev:nightly_202610071700
(ATOM 0.1.7.dev65+ga526f0d55)。C64、C128 从 RCCL 专家并行改为 MegaMoE,
启用 DP pad 行掩码和 fixed-slot decode 实例;C128 增加只按 prefill 统计的
EPLB,warmup 内重平衡后停止。C256 和新增的 C384 增加 ATOM 的 lmcache_mp
CPU KV 层,由新的 dsv4-atom-lmcache-mp-server.sh setup 脚本用镜像自带的
LMCache 在每个节点启动一个 LMCache server。C48、C96 保持 RCCL。

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: yihonglie <hyi@amd.com>

* chore: link the dsv4 ATOM AgentX changelog entry to #3819

将 dsv4 ATOM AgentX 的 perf-changelog 条目链接到 #3819。

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: yihonglie <hyi@amd.com>

* fix(dsv4-atom): escape braces in the lmcache_mp extra-config env

srtctl expands {node}/{node_id} in worker env values with str.format_map,
which parsed the JSON in ATOM_KV_OFFLOAD_EXTRA_CONFIG as a format field and
failed at worker start ("'str' object has no attribute 'mp'"). Double the
braces so the expanded value is the original JSON.

srtctl 用 str.format_map 展开 worker env 里的 {node}/{node_id},
ATOM_KV_OFFLOAD_EXTRA_CONFIG 中的 JSON 被当成格式字段解析,worker 启动即报错。
花括号加倍后展开结果即原 JSON(已用 srtctl load_config + 同样的 format_map 验证 c256/c384)。

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: yihonglie <hyi@amd.com>

* perf(dsv4-atom): run C48 and C96 on MegaMoE with EPLB

C48 and C96 move from RCCL expert parallelism to the MegaMoE backend with
EPLB, like the other DEP points; their admission, prefill-decode interval and
cudagraph sizes stay as before.

C48、C96 从 RCCL 专家并行改为 MegaMoE 后端并开启 EPLB,与其他 DEP 点一致;
max-num-seqs、prefill 间隔和 cudagraph 档位不变。

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: yihonglie <hyi@amd.com>

* chore(dsv4-atom): describe the final DEP and LMCache config in the changelog

The entry still described the first revision of the PR. It now lists the
MegaMoE move for C48 to C128 (EPLB everywhere except C64), the max-num-seqs
cap of 128 from C128 up, the lmcache_mp tier at C256 and the new C384 with
its server size and LMCache version, and that C1 to C16 are unchanged.

changelog 条目仍描述的是 PR 的第一版。现改为最终配置:C48 至 C128 从 RCCL
专家并行改用 MegaMoE(除 C64 外均开启 EPLB);C128 起 max-num-seqs 上限为
128;C256 与新增的 C384 使用 lmcache_mp CPU KV 层,并注明 server 容量和
LMCache 版本;C1 至 C16 不变。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: seungrokj <seungrok.jung@amd.com>

* perf(dsv4-atom): start the C256/C384 LMCache server with srtctl's lmcache-server service

Replace the custom setup script with srtctl's lmcache-server service, which
runs `lmcache server` from the LMCache build in the ATOM image on port 8750
with the same server arguments; ATOM's lmcache_mp tier dials that port.

C256/C384 的 LMCache server 改由 srtctl 自带的 lmcache-server 服务启动(使用镜像
自带的 LMCache,端口 8750,server 参数不变),删除自定义 setup 脚本。

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: yihonglie <hyi@amd.com>

* Revise performance metrics in perf-changelog.yaml

Updated performance changelog with new metrics and configurations for various TP settings.

* perf(amd): DSv4-Pro ATOM AgentX on MegaMoE DEP with LMCache MP on the 1007 nightly

- Update the image from rocm/atom-dev:nightly_202609291501 to
  rocm/atom-dev:nightly_202610071700 (digest
  sha256:bb3912c372dda0c82fc6831afdd76e366a372d5e9fe223373499db63b06cce65).
- Move the C48, C64, C96 and C128 DEP points from RCCL expert parallelism
  to ATOM's MegaMoE backend (all2all-backend high-throughput, moe-backend
  mega), with EPLB at every point except C64.
- Cap max-num-seqs at 128 from C128 up (C128 was 256, C256 was 512); C48,
  C64 and C96 keep admission at 2x CONC.
- Run C256 and the new C384 on the same MegaMoE DEP setup with ATOM's
  lmcache_mp CPU KV tier: one LMCache server per node (1000 GB L1, LMCache
  0.5.6.dev139+gf22dec28 as shipped in the image), started by srtctl's
  lmcache-server service, within a 1019 GB budget (dram-utilization 0.34).
- C1 to C16 are unchanged.
- No data-type or precision change to the DSpark draft: the bundled draft
  of deepseek-ai/DeepSeek-V4-Pro-0813 runs as shipped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Signed-off-by: yihonglie <hyi@amd.com>
Signed-off-by: seungrokj <seungrok.jung@amd.com>
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-authored-by: seungrokj <144636725+seungrokj@users.noreply.github.com>
Co-authored-by: seungrokj <seungrok.jung@amd.com>
…lash ATOM AgentX 更新至 1010 nightly (#3901)

* feat(amd): bump DSv4.1-Flash ATOM AgentX to 1010 nightly

Update dsv41flash-fp4-mi355x-atom-agentic-dspark from
rocm/atom-dev:nightly_202610070333 to nightly_202610100929
(ATOM 0.1.8.dev14+g73defd9b8). Recipe, points and server settings are
unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore: set perf-changelog pr-link to #3901

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(amd): bump DSv4.1-Flash ATOM AgentX to 1010 nightly

- Update the image from rocm/atom-dev:nightly_202610070333 to
  nightly_202610100929 (digest
  sha256:cc60ba06b28050a7fdec71e21f1853c782a9ec8850f031e84ebf0e49f3180974;
  ATOM 0.1.8.dev14+g73defd9b8, ROCm 7.2.4) and update model.container to
  match. The recipe, points and server settings are unchanged; upstream
  recipes/DeepSeek-V4.1-Flash-Agentic.md is unchanged between 7fc0926c6
  and 73defd9b8.
- ROCm/ATOM#2507 turns decoder SWA bounded replay on by default for
  DeepSeek-V4.1: a prefill runs layers 21..39 on each request's last 133
  rows only, the same approximation as SGLang's
  --enable-decoder-swa-bounded-replay. Upstream reports +10.7% / +22.7% /
  +38.1% P90 interactivity at TP2 c16 / c32 / c64 on this AgentX workload,
  with no GSM8K or long-context retrieval change beyond noise.
- ROCm/ATOM#2512 samples the DSpark Markov block from each TP rank's vocab
  shard instead of all-gathering the full logits (bit-identical ids; draft
  head 657 -> 302 us per decode step at TP2 c32). ROCm/ATOM#2513 packs the
  FP4 index logits by row visibility and moves BF16 decode to the
  two-source paged kernel (needs ROCm/aiter#6334). ROCm/ATOM#2495 fixes the
  FP4 sparse indexer output contract.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: seungrokj <seungrok.jung@amd.com>
Co-authored-by: Bryan Shan <58582368+Oseltamivir@users.noreply.github.com>
…D][MI355X] DSv4.1 Flash:启用 vLLM mono decode 内核(镜像待定) (#3690)

* perf(dsv41flash): repin MI355X to the 2026-10-06 ROCm 10.0 nightly

Repin the MI355X DeepSeek-V4.1-Flash DSpark recipe to
nightly-rocm100-21d93d0d and retune the ladder around it.

- Leave VLLM_ROCM_USE_AITER_MOE_A4W4_DSV4 unset. The a4w4 opt-in faults
  during graph capture at TP=2; all nine TP=2 points failed and all nine
  TP=4 points passed in run 37424787697. vllm-project/vllm#60273 tracks
  the fix, so the experts stay on the generic AITER CK a8w4 selector.
- Enable VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4 so tensor-parallel
  all-reduces above the quick-reduce size threshold use the INT4 codec.
- Hold both TP rows at concurrency 64. Run 37510565585 measured TP=2
  c128 at 150,683 tok/s/chip against 151,896 at c64 with prompt tokens
  within 0.5%, so the extra concurrency bought real prefill rather than
  scored tokens.
- Set VLLM_SHARED_EXPERTS_STREAM_TOKEN_THRESHOLD=1024. Upstream caps the
  shared-expert overlap at 256 tokens, which predates speculative
  decoding: five DSpark drafts make a decode step CONC x 6 tokens, so
  c64 submits 384 and the overlap never engages above c42. 1024 covers
  the ladder and matches the ATOM default, and stays below the prefill
  chunk so memory profiling never takes the overlap.
- Restore the upstream 16384 prefill chunk at TP2 c64, making the chunk
  uniform across all 14 points. That point had capped it at 8192 to buy
  KV room, but the room was taken by a profiling bug rather than by the
  chunk: the ROCm paged MXFP4 indexer sizes its decode logits workspace
  as (rows, max-model-len), and with no ambient vLLM config in scope the
  row count fell back to the batched-token count, so at this recipe's 1M
  context the reservation scaled linearly with the chunk.
  vllm-project/vllm#58014 bounds rows by max-num-seqs x (1 + 5 drafts),
  and the repinned image carries that fix.

Rebased onto main: the configuration-procedure guides this branch had
edited were removed by #3789, so those edits are dropped.

Co-authored-by: Cursor Agent <cursoragent@cursor.com>

* perf(dsv41flash): enable mono decode on MI355X; image TBD

- Set VLLM_ROCM_MONO_DECODE=1 (vllm-project/vllm#60397): two persistent
  launches a layer for decode steps of up to 48 rows; larger steps take
  the regular path.
- Image TBD until the first ROCm 10.0 nightly with #60397 is published.
- Drop the a4w4 notes and shorten the comments and the changelog entry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* perf(dsv41flash): drop the shared-expert stream threshold

Keep the upstream default for simplicity.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* perf(dsv41flash): pin the ROCm 10.0 nightly that carries mono decode

Replace the TBD placeholder with nightly-rocm100-7d0b4e57, the first ROCm
10.0 nightly built after vllm-project/vllm#60397 merged, so the
VLLM_ROCM_MONO_DECODE=1 setting on this recipe has kernels to run.

将 TBD 占位符替换为 nightly-rocm100-7d0b4e57,这是 vllm-project/vllm#60397
合并后构建的首个 ROCm 10.0 nightly,使本 recipe 中的 VLLM_ROCM_MONO_DECODE=1
设置有对应的 kernel 可用。

Co-authored-by: Cursor <cursoragent@cursor.com>

* docs(dsv41flash): align MI355X vLLM changelog entry with the #3690 diff

- Update the image from nightly-rocm100-ac9126e58aa7bbab1856ba6593ba4d5003fea516
  to nightly-rocm100-7d0b4e57aac4c4323225b0eee9ae960ce75ffffe, the first
  ROCm 10.0 nightly with the DeepSeek-V4.1 mono decode kernels of
  vllm-project/vllm#60397, and update model.container to match. The image
  also brings vllm-project/vllm#59685, #56638, #60159 and #60389.
- Enable the mono decode kernels (VLLM_ROCM_MONO_DECODE=1) at TP2 and TP4:
  a decode step of up to 48 rows, i.e. concurrency 1-8 with five DSpark
  drafts, runs each backbone layer as two persistent launches (30 of 40
  layers whole, the other 10 the FFN launch only). Larger steps take the
  regular path, so C16-C64 are expected unchanged.
- Enable VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4
  (vllm-project/recipes#1061) for tensor-parallel all-reduces above the
  quick-reduce size threshold.
- Restore --max-num-batched-tokens 16384 at TP2 c64: vllm-project/vllm#58014
  removed the profiling over-reservation the 8192 cap worked around. The
  prefill chunk is now 16384 at every point and the ladder stays at
  concurrency 1-64.
- No data-type or precision change to the DSpark draft:
  vllm-project/vllm#60397 skips the draft layers (layer id >=
  num_hidden_layers), so the bundled DSpark draft of
  deepseek-ai/DeepSeek-V4.1-Flash runs on vLLM's regular path as shipped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: seungrokj <144636725+seungrokj@users.noreply.github.com>
Co-authored-by: seungrokj <seungrok.jung@amd.com>
…weep / [AMD][MI355X] Kimi-K3 vLLM AgentX 更新镜像至 nightly 81198e97 并改为 dcp8 c1-c48 扫描 (#3833)

* perf(amd): retune Kimi-K3 MI355X vLLM AgentX sweep to dcp8 c10-c16 and c44-c50

Move the mid band to dcp8 (c10/c12/c14/c16) and the throughput band to
c44/c48/c50 with a 4-token DSpark draft, dropping the unused c8 and c70
variants. CUDA graphs capture every even size up to 2x CONC x (1 + drafts).
Add stream-interval 10 and VLLM_ROCM_AITER_MLA_DCP_VERIFY=asm to the base
recipe, and FP8 per-channel online quantization of linears to c1.

将中段改为 dcp8(c10/c12/c14/c16),吞吐段改为 c44/c48/c50 并使用 4 token
DSpark 草稿,移除不再使用的 c8 与 c70 变体。CUDA graph 捕获不超过
2x CONC x (1 + drafts) 的所有偶数尺寸。基础配方新增 stream-interval 10 与
VLLM_ROCM_AITER_MLA_DCP_VERIFY=asm,c1 新增线性层 FP8 per-channel 在线量化。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(amd): narrow Kimi-K3 MI355X vLLM AgentX sweep to c1, dcp8 c10 and dcp8 c48

Comment out the full band lists in amd-master.yaml and run one point per
band: c1 (dcp1, GPU-resident), c10 and c48 (dcp8, DRAM offload).

在 amd-master.yaml 中注释掉完整的分段列表,每段只运行一个点:c1(dcp1,
GPU 常驻)、c10 与 c48(dcp8,DRAM offload)。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(amd): run only Kimi-K3 MI355X vLLM c1 with dcp8

Add override_tp8_c1_dcp8, the c1 variant with decode-context-parallel-size 8
over a2a, and narrow the amd-master.yaml sweep to that single c1 dcp8 point.

新增 override_tp8_c1_dcp8:在 c1 变体基础上使用 a2a 的
decode-context-parallel-size 8,并将 amd-master.yaml 扫描缩小为该 c1 dcp8 单点。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore(amd): run only Kimi-K3 MI355X vLLM dcp8 c48

Re-enable the dcp8 DRAM-offload c48 point and disable c1 dcp8 to
reproduce the c48 NCCL watchdog hang.

仅运行 Kimi-K3 MI355X vLLM dcp8 c48:重新启用 dcp8 DRAM 卸载 c48 配置点,
禁用 c1 dcp8,以复现 c48 的 NCCL watchdog 挂起问题。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* perf(amd): Kimi-K3 MI355X vLLM AgentX on nightly 81198e97 with dcp8 c1-c48

Move kimik3-fp4-mi355x-vllm-agentic-mtp and its recipe to the
nightly-rocm100-81198e97 image and sweep dcp1 c1, dcp8 c1 (GPU-resident)
and dcp8 DRAM-offload c4, c10-c16, c44, c48. Add override_tp8_c4_dcp8_simple
and raise the c14/c16 DSpark draft from 3 to 4 tokens, with graph capture
sized to 2 x CONC x (1 + drafts).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* perf(amd): disable breakable CUDA graphs for Kimi-K3 MI355X vLLM c1/c4

Set VLLM_USE_BREAKABLE_CUDAGRAPH to 0 in override_tp8_c1,
override_tp8_c1_dcp8, override_tp8_c4 and override_tp8_c4_dcp8_simple.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* perf(amd): use FULL_AND_PIECEWISE on every Kimi-K3 MI355X vLLM point

Switch c10/c12/c14/c16 from FULL to FULL_AND_PIECEWISE so all overrides
request the same cudagraph mode, refresh the recipe comment, and add the
perf-changelog entry for #3833.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs(amd): align Kimi-K3 MI355X vLLM changelog entry with the #3833 diff

Correct the kimik3-fp4-mi355x-vllm-agentic-mtp perf-changelog entry:
- Every point requests FULL_AND_PIECEWISE (the mid band was FULL) with
  breakable CUDA graphs off; without a torch.compile submodule vLLM
  overrides it to FULL_DECODE_ONLY, as the c1 and c14 server logs show.
- Golden (synthetic) acceptance applies at every draft point in agentic
  runs, not only the throughput band; note the c14 draft length 3 -> 4.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* perf(amd): Kimi-K3 MI355X vLLM AgentX on nightly 81198e97 with dcp8 c1-c48

- Update the image from vllm/vllm-openai-rocm:nightly-rocm100-36768d1bfd39094681cdbc8cb37d4b31c0729c89 to vllm/vllm-openai-rocm:nightly-rocm100-81198e97ba7eee2a22540caaa756b7fdddcb4d93.
- Sweep dcp1 concurrency 1 and dcp8 concurrency 1 GPU-resident, and dcp8 concurrency 4, 10, 12, 14, 16, 44 and 48 with the SimpleCPUOffloadConnector DRAM tier (224.875 GB/rank). This replaces dcp1 concurrency 1/4, dcp1 DRAM-offload concurrency 8-14 and dcp8 concurrency 44/48/70. The dcp8 points use the a2a DCP backend.
- DSpark draft length per point: 7 at concurrency 1, 5 at 4, 4 at 10, 3 at 12, and 4 at 14, 16, 44 and 48 (concurrency 14 was 3). The throughput band (44, 48) previously had no speculative-config and now runs the 4-token DSpark draft. As at every draft point, agentic runs replace block rejection with the golden acceptance length for that draft length.
- Admission is 2x concurrency. CUDA graphs capture every even size up to 2x concurrency x (1 + draft tokens), replacing the previous every-size lists (up to 8192 in the throughput band).
- Every point requests cudagraph_mode FULL_AND_PIECEWISE (the mid band was FULL) with breakable CUDA graphs disabled (VLLM_USE_BREAKABLE_CUDAGRAPH=0, previously 1 at concurrency 1 and 4). The AMD Kimi-K3 model has no torch.compile submodule, so vLLM overrides the mode to FULL_DECODE_ONLY at load, as the concurrency 1 and 14 server logs show.
- Add stream-interval 10 and VLLM_ROCM_AITER_MLA_DCP_VERIFY=asm, which routes DCP multi-token verify through the AITER ASM round-robin decode, to every point.
- Concurrency 1 (dcp1 and dcp8) adds quantization-config linear fp8_per_channel: vLLM quantizes the target's linear layers to FP8 W8A8 at load, except kv_b_proj, in_proj_qkvgfab, f_b_proj, fused_qkv_a_proj, self_attn.g_proj and layer 0 mlp.down_proj, which stay BF16. The routed experts stay MXFP4.
- No change to the Inferact/Kimi-K3-DSpark draft's precision: its model config takes the speculative config's own quantization (unset) and never receives quantization-config, and get_draft_quant_config() returns None for K3DSparkModel, so its weights stay BF16 and its KV cache stays fp8.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ps / [NVIDIA] GLM-5.2 NVFP4 B300 SGLang AgentX:调优 EAGLE 推测步数 (#3890)

* [NVIDIA] GLM-5.2 NVFP4 B300 SGLang AgentX: tune EAGLE speculative steps / [NVIDIA] GLM-5.2 NVFP4 B300 SGLang AgentX:调优 EAGLE 推测步数

* Add PR link to perf changelog

* Restore unrelated tilert pr-link placeholder in perf changelog

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-authored-by: Bryan Shan <58582368+Oseltamivir@users.noreply.github.com>
…l linker / 将 GB200 DeepSeek-V4-Pro AgentX 分离式配置切换到 Mooncake external linker (#3701)

* perf(agentx): GB200 DSV4 SGLang disagg KV offload via Mooncake unified-cache external linker

* config(agentx): record Mooncake as the GB200 DSV4 SGLang disagg KV offload backend

* docs(changelog): GB200 DSV4 SGLang AgentX Mooncake KV offload

* docs(changelog): link #3701

* perf(agentx): 8k-token prefill chunks per rank on the GB200 DSV4 DEP16 prefill recipes

Raise chunked-prefill-size from 65536 to 131072 on the c256/c768/c1024/c1280
DEP16 prefill workers (4k to 8k tokens per DP rank) and lower prefill
mem-fraction-static from 0.85 to 0.80; 8k chunks run out of GPU memory at 0.85.

* docs(changelog): GB200 DSV4 agg key, DEP16 prefill chunks; English-only entry

List dsv4-fp4-gb200-dynamo-sglang-agentic-agg so the sweep reruns the low-latency
TP8 c1/c4 points, describe the 8k-token DEP16 prefill chunks, and drop the
Chinese bullets now that new changelog entries must be English-only.

* Revert "perf(agentx): 8k-token prefill chunks per rank on the GB200 DSV4 DEP16 prefill recipes"

This reverts commit 28b5f47.

* docs(changelog): drop the reverted DEP16 prefill chunk change from the GB200 DSV4 entry

---------

Co-authored-by: weireweire <20922698+weireweire@users.noreply.github.com>
Co-authored-by: Bryan Shan <58582368+Oseltamivir@users.noreply.github.com>
@cquil11

cquil11 commented Oct 12, 2026

Copy link
Copy Markdown
Collaborator Author

/stage-results 38029231836

@github-actions

github-actions Bot commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

@cquil11 staged run 38029231836: https://inferencemax-app-git-staging-semianalysisai.vercel.app/inference?i_dates=2026-10-10~r38029231836

This run remains available across future /stage-results requests. Staging the same run ID again updates its staged data. Staging workflow

ilmarkov and others added 2 commits October 12, 2026 17:43
Match Sep 28 speculative policy on GB200 llm-d recipes (adaptive disagg/DEP8,
golden AL only on agg TP8) and skip golden injection when adaptive is enabled.

在 GB200 llm-d AgentX 配方中恢复 9 月 28 日的投机策略(disagg/DEP8 自适应验证、
仅 agg TP8 使用黄金 AL),并在启用自适应时跳过黄金接受长度注入。
Signed-off-by: Cam Quilici <cjquilici@gmail.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

non-canary-full-sweep-enabled Run the full sweep without the canary gate (full search space, no trim)

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

8 participants